package main

import (
	"fmt"
	"strconv"
)

func main() {
	// %d 表示整型数字，%s 表示字符串
	var stockcode = 123
	var enddate = "2020-12-31"
	var url = "Code=%d&endDate=%s"
	//var target_url = fmt.Sprintf(url, stockcode, enddate)
	fmt.Printf(url, stockcode, enddate)

	var i int64
	var f float64
	var b bool
	var s string
	fmt.Println("")
	fmt.Printf("%v %v %v %q\n", i, f, b, s)

	// 示例：正确的 if-else 语法
	if stockcode > 100 {
		fmt.Println("Stock code is greater than 100")
	} else {
		fmt.Println("Stock code is 100 or less")
	}

	/* 定义局部变量 */
	var grade string = "B"
	var marks int = 90

	switch marks {
	case 90:
		grade = "A"
	case 80:
		grade = "B"
	case 50, 60, 70:
		grade = "C"
	default:
		grade = "D"
	}

	switch grade {
	case "A":
		//fmt.Printf("优秀!\n")
		break
	case "B", "C":
		fmt.Printf("良好\n")
	case "D":
		fmt.Printf("及格\n")
	case "F":
		fmt.Printf("不及格\n")
	default:
		fmt.Printf("差\n")
	}
	fmt.Printf("你的等级是 %s\n", grade)

	map1 := make(map[int]float32)
	map1[1] = 1.0
	map1[2] = 2.0
	map1[3] = 3.0
	map1[4] = 4.0

	// 读取 key 和 value
	for key, value := range map1 {
		fmt.Printf("key is: %d - value is: %f\n", key, value)
	}

	// 读取 key
	for key := range map1 {
		fmt.Printf("key is: %d\n", key)
	}

	// 读取 value
	for _, value := range map1 {
		fmt.Printf("value is: %f\n", value)
	}

	/* 定义局部变量 */
	var a1 int = 100
	var b1 int = 200
	var ret int

	/* 调用函数并返回最大值 */
	ret = max(a1, b1)

	fmt.Printf("最大值是 : %d\n", ret)

	//函数返回两个值
	a2, b2 := "Google", "Runoob"
	fmt.Printf("原来是: %s , %s\n", a2, b2)
	a2, b2 = swap("Google", "Runoob")
	fmt.Printf("交换后: %s , %s\n", a2, b2)

	//指针示例
	var a int = 20 /* 声明实际变量 */
	var ip *int    /* 声明指针变量 */

	ip = &a /* 指针变量的存储地址 */

	fmt.Printf("a 变量的地址是: %x\n", &a)
	/* 指针变量的存储地址 */
	fmt.Printf("ip 变量储存的指针地址: %x\n", ip)
	/* 使用指针访问值 */
	fmt.Printf("*ip 变量的值: %d\n", *ip)

	num := 3.14
	str := strconv.FormatFloat(num, 'f', 2, 64)
	fmt.Printf("浮点数 %f 转为字符串为：'%s'\n", num, str)
}

/**
 * 函数返回两个数的最大值
 * @param num1
 * @param num2
 * @return int
 */
func max(num1, num2 int) int {
	/* 定义局部变量 */
	var result int

	if num1 > num2 {
		result = num1
	} else {
		result = num2
	}
	return result
}

/**
 * 函数返回两个字符串的交换值
 * @param x
 * @param y
 * @return string,string
 */
func swap(x, y string) (string, string) {
	return y, x
}
